Type String
For more info read 'Visual C++ 5.0 Symbolic Debug Information Specification'.

A type string is a series of consecutive leaf structures:

offset  size     name
0       SHORT    lenght
2       SHORT    mainLeaf
4       *        data
*       *        subLeaf
*       *        data
*       *        subLeaf
*       *        ....


leaf    LF_... index, as described below
data    Data specified to each leaf type

MainFields:
0x0000    STARTYP
0x0001    MODIFIER
0x0002    POINTER
0x0003    ARRAY
0x0004    CLASS
0x0005    STRUCT
0x0006    UNION
0x0007    ENUM
0x0008    PROCEDURE
0x0009    MFUNCTION
0x000A    VTSHAPE
0x000B    COBOL0
0x000C    COBOL1
0x000D    BARRAY
0x000E    LABEL
0x000F    NULL
0x0010    NOTTRAN
0x0011    DIMARRAY
0x0012    VFTPATH

0x0030    SET
0x0031    SUBRANGE
0x0032    PARRAY
0x0033    PSTRING
0x0034    CLOSURE
0x0035    PROPERTY
0x0036    LSTRING
0x0037    VARIANT
0x0038    CLASSREF

0x0200    SKIP
0x0201    ARGLIST
0x0202    DEFARG
0x0203    LIST
0x0204    FIELDLIST
0x0205    DERIVED
0x0206    BITFIELD
0x0207    METHODLIST
0x0208    DIMCONU
0x0209    DIMCONLU
0x020A    DIMVARU
0x020B    DIMVARLU
0x020C    REFSYM

SubFields:
0x0400    BCLASS
0x0401    VBCLASS
0x0402    IVBCLASS
0x0403    ENUMERATE
0x0404    FRIENDFCN
0x0405    INDEX
0x0406    MEMBER
0x0407    STMEMBER
0x0408    METHOD
0x0409    NESTTYPE
0x040A    VFUNCTAB
0x040B    FRIENDCLS

-------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------
(0x0003)  ARRAY

It's used for LOCAL and GLOBAL arrays.

offset  size     name
0       SHORT    LF_ARRAY
2       ULONG    elemType
6       ULONG    indexType
A       ULONG    iName
E       SHORT    lenght
10      SHORT    elements

elemType - Type index of each array element (look into 'Primitive Type Listing.txt').
indexType - Type index of indexing variable (look into 'Primitive Type Listing.txt').
iName - Index of string in sstNames (1 is the first string).
length - Length of array in bytes.
elements - Number of grouped elements in array.
*ex.
*
*String    db"hjj",0
*
*lenght=3 elements=1
*
-------------------------------------------------------------------------------------------------------
(0x0004)   CLASS

Same as STRUCT.

-------------------------------------------------------------------------------------------------------
(0x0005)  STRUCT

offset  size     name
0       SHORT    LF_STRUCT
2       SHORT    cFields
4       ULONG    fieldList
8       BYTE     property
9       BYTE     reserved
A       ULONG    contains class
E       ULONG    dList
12      ULONG    vTable
16      ULONG    iName

cFields - Number of elements in the structure.
fieldList - Type index of field list type record.
----------------------------------------
property - Property bit field.
Boolean: 0(No)/1(Yes)

offset(bit)    size   name
0(1.bit)       1bit   packed
1(2.bit)       1bit   ctor
2(3.bit)       1bit   overops
3(4.bit)       1bit   isnested
4(5.bit)       1bit   cnested
5(6.bit)       1bit   opassign
6(7.bit)       1bit   opcast
7(8.bit)       1bit   fwref

packed - Structure is packed.
ctor - Class has constructors and/or destructors.
overops - Class has overloaded operators.
isnested - Class is a nested class.
cnested - Class contains nested classes.
opassign - Class has overloaded assignment.
opcast - Class has casting methods.
fwdref - Class/structure is a forward (incomplete) reference.

----------------------------------------
dList - Type index of the derivation list.  This is output by the compiler as 0x0000.
        (derivation list)
vTable - Type index of the virtual function table shape descriptor. (0x000)
iName - Index of string in sstNames. (1 is the first string)

*ex.:
*
*0B9DE  Type: 100D  Len: 001C STRUCT 
*  Fields: 0005  FieldIdx: 107A  Name: TOOLTIPTEXTA [29B]
*  Containing Class: 0000  Length: 00068
*  Derivation list: 0000  VTable: 0000
*  Packed: Yes  Constructors: No   Destructors: No   Overloaded operators: No 
*  Is nested: No   Nested classes: No   Overload assigments: No 
*  Casting methods: No   Forward Ref: No 
*
*0DA62  Type: 107A  Len: 005C FIELDLIST 
*  MEMBER   Type: 1073        Offs: 00000  Access: none       Name: tt_hdr [503]  Browser offset: 0000
*  MEMBER   Type: uint32      Offs: 0000C  Access: none       Name: tt_lpszText [504]  Browser offset: 0000
*  MEMBER   Type: 100F        Offs: 00010  Access: none       Name: tt_szText [505]  Browser offset: 0000
*  MEMBER   Type: uint32      Offs: 00060  Access: none       Name: tt_hinst [506]  Browser offset: 0000
*  MEMBER   Type: uint32      Offs: 00064  Access: none       Name: tt_uFlags [507]  Browser offset: 0000
*

-------------------------------------------------------------------------------------------------------
(0x0006)   UNION

Same as STRUCT. (But probably offsets are zero for all.)


-------------------------------------------------------------------------------------------------------
(0x0008)  PROCEDURE

offset  size     name
0       SHORT    LF_PROCEDURE
2       LONG     rType
6       BYTE     call
7       BYTE     reserved
8       SHORT    params
A       LONG     argList


rType -  Type index of the value returned by the procedure.
         (Look into 'Primitive Type Listing.txt'.)
----------------------------------------
call - Calling convention of the procedure.
0    Near C (arguments pushed right to left, caller pops arguments)
1    Far C
2    Near pascal  (arguments pushed left to right, callee pops arguments)
3    Far pascal
4    Near fastcall
5    Far fastcall
6    PCode
7    Near stdcall
8    Far stdcall
9    Near syscall
10   Far syscall
11   This call
12   MIPS call
13   Generic
14-255    Reserved
Borland supports from 0 to 10 (with 10).
Borland:- if bit 40h is set => Variable args (don't ask me what this means)
        - if bit 80h is set => Fast This
----------------------------------------
params - Number of parameters.
argList - Type index of argument list type record.
          *ex:
          *0164A  Type: 1004  Len: 0008 ARGLIST 
          *  Type: uint32
          *
          *01656  Type: 1005  Len: 000E PROCEDURE 
          *  near pascal returns void
          *  Params: 0001  ArgList: 1004

-------------------------------------------------------------------------------------------------------
(0x000E)  LABEL

This is used for assembler labels.

offset  size     name
0       SHORT    LF_LABEL
2       SHORT    mode

mode - Addressing mode of the label
       (0 NEAR label)
       (4 FAR label)


-------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------
(0x0201)  ARGLIST
For functions that are defined in lib files (I think??).
But certainly not for program functions.

offset        size     name
0             SHORT    LF_ARGLIST
2             SHORT    argCount
4    argCount*ULONG    elemType

argCount - Count of number of indices in list.
elemType - Type index of each array element (look into 'Primitive Type Listing.txt').



-------------------------------------------------------------------------------------------------------
(0x0204)  FIELDLIST

A field list contains the descriptors of the fields of a structure, class, union, or enumeration.
The field list is composed of zero or more subfields.
Because of the requirement for natural alignment, there may be padding between elements of the field list.
As a program walks down the field list, the address of the next subfield is calculated by
adding the length of the previous field to the address of the previous field.

The byte at the new address is examined and if it is greater than 0xf0,
the low four bits are extracted and added to the address to find the address of the next subfield.

These padding fields are not included in the count field of the class, structure, union, or enumeration type records.
If the field list  is broken into two or more pieces by the compiler,
then the last field of each piece is a LF_INDEX with the type being the index of the continuation record.

The LF_INDEX and LF_PADx fields of the field list are not included in
field list count specified in the class, structure, union, or enumeration record.


offset  size     name
0       SHORT    LF_FIELDLIST
2       *        subFields

subFields - Look at the beginning of this text.

-------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------
(0x0405)  INDEX


offset  size     name
0       SHORT    LF_INDEX
2       ULONG    index

index - Continuation index.

-------------------------------------------------------------------------------------------------------
(0x0406)  MEMBER

This leaf specifies nonstatic data members of a structure/class.
No lenght(this one is part of LF_STRUCT.)

offset  size     name
0       SHORT    LF_MEMBER
2       ULONG    indexType
6       SHORT    access
8       ULONG    iName
C       ULONG    browserOffset
10      SHORT    offset

indexType - Type index of indexing variable (look into 'Primitive Type Listing.txt').
----------------------------------------
access - ?(Normally none.)
0 none
1 private
2 protected
3 public

----------------------------------------
iName - Index of string in sstNames. (1 is the first string)
browserOffset - ?
offset - Offset of member(variable) in struct.

